/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package baseDatos;

import entidades.CausaMuerte;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author Facundo
 */
public class CausaMuerteDAO {
    private String query;
    private Connection conDB;
    private PreparedStatement pst;    

    public CausaMuerteDAO(Connection con) {
        this.conDB = con;
    }

    public CausaMuerteDAO() {
    }

    /**
     * @return the query
     */
    public String getQuery() {
        return query;
    }

    /**
     * @param query the query to set
     */
    public void setQuery(String query) {
        this.query = query;
    }

    /**
     * @return the conDB
     */
    public Connection getConDB() {
        return conDB;
    }

    /**
     * @param conDB the conDB to set
     */
    public void setConDB(Connection conDB) {
        this.conDB = conDB;
    }

    /**
     * @return the pst
     */
    public PreparedStatement getPst() {
        return pst;
    }

    /**
     * @param pst the pst to set
     */
    public void setPst(PreparedStatement pst) {
        this.pst = pst;
    }


    /*
     * Metodo para devolver todos las causas muertes de la base.
     */
    public ArrayList getCausaMuertes(){
        ArrayList todos = null;
        todos = this.devolverCausaMuertes("select * from PC_CAUSA_MUERTE");
        return todos;
    }

    /*
     * Metodo que devuelve un array con todos las causas muertes de la base de acuerdo a la sentencia que recibe
     * como parametro.
     * retorna un arrayList de causas de muertes
     */
     private ArrayList devolverCausaMuertes(String sentencia) {
        ArrayList todos = null;
        CausaMuerte cat = null;

        try {
            todos = new ArrayList();
            ResultSet rs;
            setQuery(sentencia);
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                cat = new CausaMuerte();
                if(rs.getString("descripcion")!=null){
                    cat.setDescripcion(rs.getString("descripcion"));
                }
                cat.setNombre(rs.getString("nombre"));
                todos.add(cat);
            }
            rs.close();
            getPst().close();
        } catch (SQLException ex) {
            Logger.getLogger(CausaMuerteDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return todos;
    }

    /*
     * Metodo que devuelve una causa de muerte determinada de acuerdo al nombre pasado por parametro.
     * Este metodo crea la sentencia y se la envia al metodo devolverCausaMuerte(), que retorna
     * un objeto categoria
     */
    public CausaMuerte getCausaMuerte(String nombre) {
        setQuery("SELECT * from PC_CAUSA_MUERTE where nombre='" + nombre + "'");
        CausaMuerte cat = this.devolverCausaMuerte(getQuery());
        return cat;
    }


    /*
     * Metodo que devuelve una causa de muerte determinada de acuerdo al codigo pasado por parametro.
     * Este metodo crea la sentencia y se la envia al metodo devolverCausaMuerte(), que retorna
     * un objeto categoria
     */
    public CausaMuerte getCausaMuerte(int codigo) {
        setQuery("SELECT * from PC_CAUSA_MUERTE where codigo_causa=" + codigo);
        CausaMuerte cat = this.devolverCausaMuerte(getQuery());
        return cat;
    }

     /*
      * Metodo que devuelve una sola categoria. parametro de entrada una sentencia.
      */
    private CausaMuerte devolverCausaMuerte(String sentencia) {
        CausaMuerte cat = null;
        ResultSet rs = null;
        setQuery(sentencia);
        try {
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                cat = new CausaMuerte();
                if(rs.getString("descripcion")!=null){
                    cat.setDescripcion(rs.getString("descripcion"));
                }
                cat.setNombre(rs.getString("nombre"));                
            }
            getPst().close();
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(CausaMuerteDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return cat;
    }

     /*
      * Metodo que devuelve el codigo de una causa muerte, recibe como parametro el nombre de la causa
      */
    public int devolverCodigoCausaMuerte(String nombre) {
        System.out.println("Devolviendo el codigo de causa de muerte...");
        int codigoCausa = -1;
        ResultSet rs = null;
        setQuery("select codigo_causa from PC_CAUSA_MUERTE where nombre='" + nombre + "'");
        System.out.println("Sentencia utilizada para la devolucion de la causa de muerte: "+this.getQuery());
        try {
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                codigoCausa = rs.getInt("codigo_causa");                
            }
            getPst().close();
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(CausaMuerteDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Excepcion: "+ex.getMessage()+". Sentencia utilizada: "+this.getQuery());
        }
        return codigoCausa;
    }
}
